package com.bigdata

object Demo7Class {

  def main(args: Array[String]): Unit = {

    // java中定义的class类，可以在scala中直接使用，使用的方式和Java使用时一样的
    //    val javaUser = new Demo9JavaUser("1001", "zs", 20)
    //    val javaUser1 = new Demo9JavaUser("1002", "wangwu", 22)
    //
    //    println(javaUser.getName())
    //    javaUser.setName("wangwu")
    //    println(javaUser.getName())
    //
    //    // 默认调用toString方法
    //    println(javaUser)
    //
    //    // 从写了equals方法，使用equals的逻辑来比较对象
    //    println(javaUser == javaUser1)
    //    println(javaUser.equals(javaUser1))

    println("*" * 100)

    //    val stu = new Student(1002, "ls")
    // 相当与调用了函数
    val stu = new Student(1002)

    //    println(stu)
    stu.show()

    val stu1 = new Student(1003, "lisi", 20)
    stu1.show

    println("*" * 100)
    println(stu)
    println(stu1)

  }

}

/**
 * 在scala中同样可以定义class，和Java中的class是不同的
 * 在类中可以定义，属性，方法，构造函数
 * 默认构造函数：{}是scala默认构造函数的代码块,默认构造函数可以有参数
 *
 * scala的类同样是Object的子类
 * 在scala定义类的时候，就是在定义一个创建这个类对象的构造方法
 *
 */
// 定义一个Student类的构造函数, 在函数字段上指定默认值
class Student(id: Int, name: String = "hello") extends Object {

  println("Student...")

  // 属性的能不能通过构造方法传递
  private val _id: Int = this.id
  private val _name: String = this.name
  // _制定一个默认值
  private var _age: Int = _

  // 构造方法怎么重载 def别漏了
  def this(id: Int, name: String, age: Int) {
    this(id, name)
    this._age = age
  }

  // 方法
  def show(): Unit = {
    println(s"id-${_id},name-${_name},age-${_age}")
  }

  // 重写了Object里面的toString方法，那么必须要添加override关键字
  override def toString: String = {
    s"id-${_id},name-${_name},age-${_age}"
  }
}



